<?php


namespace App\Http\Controllers\Car;


use App\Http\Controllers\Controller;
use App\Models\CarModels\PatrolImg;
use App\Models\CarModels\PatrolTask;
use Illuminate\Database\QueryException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Validator;

/**
 * @group 手机app->工作台->质检->巡查任务查看
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class PatrolTaskController extends Controller
{
    /**
     * 巡查任务查看所有
     *
     * @queryParam  patrol_address    巡查地址
     * @queryParam  task_type    任务类型
     * @queryParam task_type_second 任务类型2级
     * @queryParam  employee    人员
     * @queryParam  patrol_tool    巡查工具
     * @queryParam  body    注意事项
     * @queryParam  clean    清洁度
     * @queryParam  major    专业
     * @queryParam  speed    速度
     * @queryParam  score    评分
     * @queryParam  opinion    意见
     * @queryParam  voice    巡查结果 语音
     * @queryParam  other    其他
     * @queryParam  task_level 紧急程度
     * @queryParam  car 车辆
     * @queryParam  task_body 任务内容
     * @queryParam  task_summary 任务概要
     * @queryParam  status  0待完成，1完成
     * @queryParam  type 问题类型
     */
    public function index(Request $request){
        $query =PatrolTask::with(['type','type_second','employee','file']);
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);
    }

    /**
     * 巡查任务添加
     *
     * @bodyParam patrol_address string required  巡查地址
     * @bodyParam task_type int required  任务类型
     * @bodyParam task_type_second int required  任务类型2级
     * @bodyParam employee int required  人员
     * @bodyParam patrol_tool string required  巡查工具
     * @bodyParam body string required  注意事项
     * @bodyParam task_level int required 紧急程度
     * @bodyParam car string required 车辆
     * @bodyParam  task_body string required 任务内容
     * @bodyParam  task_summary string required 任务概要
     * @bodyParam  file string optional 图片
     * @bodyParam  type string optional 问题类型
     */
    public function store(Request $request){
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $data=$request->all();
        try{
            if ($request->has('file'))
            {
                DB::beginTransaction();
                unset($data['file']);
                $data=PatrolTask::create($data);
                $row=json_decode($request->get('file'),true);
                foreach ($row as $k=>$v)
                {
                    $img=array(
                        'patrol_task_id'=>$data->id,
                        'img_id'=>$v
                    );
                    try{
                        PatrolImg::create($img);
                    }catch (QueryException $e){
                        DB::rollBack();
                        return response()->json(encodeMsg($e->getMessage(),500),500);
                    }
                }
                DB::commit();
            }else{
                $data=PatrolTask::create($data);
            }
            return response()->json(encodeMsg($data,201),201);
        }catch (QueryException $e){
            return response()->json(encodeMsg($e->getMessage(),500),500);
        }
    }

    /**
     * 巡查任务查看(单个信息显示)
     *
     * @queryParam  patrol_address    巡查地址
     * @queryParam  task_type    任务类型
     * @queryParam  employee    人员
     * @queryParam task_type_second 任务类型2级
     * @queryParam  patrol_tool    巡查工具
     * @queryParam  body    注意事项
     * @queryParam  clean    清洁度
     * @queryParam  major    专业
     * @queryParam  speed    速度
     * @queryParam  score    评分
     * @queryParam  opinion    意见
     * @queryParam  voice    巡查结果 语音
     * @queryParam  other    其他
     * @queryParam  car  车辆
     * @queryParam  task_body 任务内容
     * @queryParam  task_summary 任务概要
     * @queryParam  status  0待完成，1完成
     * @queryParam  type 问题类型
     */
    public function show($pk){
        $data = PatrolTask::with(['type','type_second','employee','file'])->find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该车辆所属城市信息"],404),404);
        }else{
            return response()->json(encodeMsg($data,200),200);
        }
    }

    /**
     * 巡查任务信息修改
     *
     * @bodyParam patrol_address string optional  巡查地址
     * @bodyParam task_type_second int optional  任务类型2级
     * @bodyParam task_type int optional  任务类型
     * @bodyParam employee int optional  人员
     * @bodyParam patrol_tool string optional  巡查工具
     * @bodyParam body string optional  注意事项
     * @bodyParam  clean int optional  清洁度 0 0星 1 1星 .. 5 5星
     * @bodyParam  major int optional  专业 0 0星 1 1星 .. 5 5星
     * @bodyParam  speed int optional 速度 0 0星 1 1星 .. 5 5星
     * @bodyParam  score int optional 评分 0<score<100
     * @bodyParam  opinion text optional 意见
     * @bodyParam  voice  int optional 巡查结果 语音  上传接口返回的id
     * @bodyParam  other  text optional 其他
     * @bodyParam  car  string optional 车辆
     * @bodyParam  task_body string optional 任务内容
     * @bodyParam  task_summary string optional 任务概要
     * @bodyParam  status int optional 0待完成，1完成
     * @bodyParam  file string optional 图片
     * @bodyParam  type string optional 问题类型
     */
    public function update(Request $request, $pk){
        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $data=$request->all();
        $carkind = PatrolTask::find($pk);
        if($carkind == []){
            return response()->json(encodeMsg(["message"=>"没有任务信息"],404),404);
        }
        try {
            if ($request->has('file'))
            {
                unset($data['file']);
                DB::beginTransaction();
                PatrolImg::where('patrol_task_id',$pk)->delete();
                $row=json_decode($request->get('file'),true);
                foreach ($row as $k=>$v)
                {
                    $img=array(
                        'patrol_task_id'=>$pk,
                        'img_id'=>$v
                    );
                    try{
                        PatrolImg::create($img);
                    }catch (QueryException $e){
                        DB::rollBack();
                        return response()->json(encodeMsg($e->getMessage(),500),500);
                    }
                }
                DB::commit();
            }else{
                $carkind->update($data);
            }
            return response()->json(encodeMsg($carkind,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"修改失败"],400),400);
        }
    }

    /**
     * 巡查任务删除
     *
     */

    public function destroy($pk){
        $data = PatrolTask::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该车辆所属城市信息"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],204),200);
    }
}
